﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Logica.Clases;
using vudu.Logica.Excepciones;

namespace vudu.PaginasWeb.G3AccesoSistema
{
    public partial class Inicio : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            MensajesEnBlanco();
        }

        /// <summary>
        /// me dirigo a la pagina HomeEstudiante pasandole el usuario autenticado
        /// </summary>
        /// <param name="rolActual"></param>
        protected void redireccionarEstudiante(Rol rolActual)
        {
            Session["correo"] = rolActual.Correo;
            Session["rol"] = "Estudiante";
            Session["Usuario"] = rolActual.MiEstudiante;
            Response.Redirect("../Home/HomeEstudiante.aspx");
        }

        /// <summary>
        /// redirecciono a la pagina de profesor con el usuario autenticado
        /// </summary>
        /// <param name="rolActual"></param>
        protected void redireccionarProfesor(Rol rolActual)
        {
            Session["correo"] = rolActual.Correo;
            Session["rol"] = "Profesor";
            Session["Usuario"] = rolActual.MiProfesor;
            Response.Redirect("../Home/HomeProfesor.aspx");
        }

        /// <summary>
        /// Redirecciono a la pagina de inicio de Escuela conel usuario autenticado
        /// </summary>
        /// <param name="rolActual"></param>
        protected void redireccionarEscuela(Rol rolActual)
        {
            Session["correo"] = rolActual.Correo;
            Session["rol"] = "Escuela";
            Session["Usuario"] = rolActual.MiEscuela;
            Response.Redirect("../Home/HomeEscuela.aspx");
        }

        /// <summary>
        /// Redirecciono a la pagina de inicio de Universidad con el usuario autenticado
        /// </summary>
        /// <param name="rolActual"></param>
        protected void redireccionarUniversidad(Rol rolActual)
        {
            Session["correo"] = rolActual.Correo;
            Session["rol"] = "Universidad";
            Session["Usuario"] = rolActual.MiUniversidad;
            Response.Redirect("../Home/HomeUniversidad.aspx");
        }

        /// <summary>
        /// en funcion al tipo de rol, escogo hacia dodne se debe redirigir el usuario
        /// </summary>
        /// <param name="opcion">
        /// 1: estudiante
        /// 2: profesor
        /// 3: escuela
        /// 4: universidad
        /// </param>
        /// <param name="rolActual"></param>
        protected void RedireccionarA(int opcion, Rol rolActual)
        {
            switch (opcion)
            {
                case 1: //es un usuario estudiante
                    {
                        this.redireccionarEstudiante(rolActual);
                    }
                    break;

                case 2: //es un usuario profesor
                    {
                        this.redireccionarProfesor(rolActual);
                    }
                    break;

                case 3: //es un usuario escuela
                    {
                        this.redireccionarEscuela(rolActual);
                    }
                    break;

                case 4: //es un usuario universidad
                    {
                        this.redireccionarUniversidad(rolActual);
                    }
                    break;

                default:
                    {
                    }
                    break;

            }//fin sentencia Switch

        }

        /// <summary>
        /// Este metodo valida que si los campos introducidos por el usuario cumplen
        /// con la condicion de que no sean vacios o no sobrepasen los 50 caracteres
        /// </summary>
        /// <returns>booleano true si es los campos son validos
        /// o false si son erroneos</returns>
        protected bool CamposCorrectos()
        {
            InicioSistema inicio = new InicioSistema();
            if (inicio.ValidarDatosIngresados(tbNickname.Text, tbPassword.Text))
                return true;
            else
                return false;
        }

        /// <summary>
        /// metodo que se encarga de buscar al usuario en el sistema
        /// </summary>
        protected void AutenticarUsuario()
        {
            try
            {
                InicioSistema inicio = new InicioSistema();
                Rol rolActual;
                rolActual = inicio.ConsultarUsuarioBD(tbNickname.Text, tbPassword.Text);
                ///si el rol existe en el sistema
                if (rolActual != null)
                {
                    int tipoUsuario = inicio.DefinirUsuario(rolActual);
                    this.RedireccionarA(tipoUsuario, rolActual);
                }
                else
                {
                    this.lMensajeError.Text = "Disculpe, el correo o la contraseña son invalidos";
                    this.lMensajeError.CssClass = "transaccionFallida";
                    this.lMensajeError.Visible = true;
                }
            }
            catch (InicioSesionException)
            {
                this.lMensajeError.Text = "Error de inicio sesion";
                this.lMensajeError.CssClass = "transaccionFallida";
                this.lMensajeError.Visible = true;
            }
        }

        /// <summary>
        /// pongo de forma invisible los mensajes de los lables
        /// </summary>
        protected void MensajesEnBlanco()
        {
            this.lErrorCorreo.Text = " ";
            this.lErrorCorreo.CssClass = "transaccionFallida";
            this.lErrorCorreo.Visible = false;
           
            this.lErrorPass.Text = " ";
            this.lErrorPass.CssClass = "transaccionFallida";
            this.lErrorPass.Visible = false;
            
            this.lMensajeError.Text = " ";
            this.lMensajeError.CssClass = "transaccionFallida";
            this.lMensajeError.Visible = false;
        }
        /// <summary>
        /// este metodo muestra los mensajes de que los campos son erroneos
        /// </summary>
        protected void MostrarMensajeErrorEnCampos()
        {
            InicioSistema inicio = new InicioSistema();
            if (!inicio.EsCorreoCorrecto(tbNickname.Text))
            {
                this.lErrorCorreo.Text = "El correo es invalido";
                this.lErrorCorreo.CssClass = "mensaje";
                this.lErrorCorreo.Visible = true;
           
            }
            if (!inicio.EsPassCorrecto(tbPassword.Text))
            {
                this.lErrorPass.Text = "La contraseña es invalida";
                this.lErrorPass.CssClass = "mensaje";
                this.lErrorPass.Visible = true;
            
            }
        }

        /// <summary>
        /// Una vez seleccionada la opcion de login, el sistema realiza
        /// la busqueda del rol del usuario
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BotonInicio_Click(object sender, EventArgs e)
        {
            ///si los campos son correctos, continuo el proceso de login
            if (CamposCorrectos())
            {
                AutenticarUsuario();
            }
            else
            {
                MostrarMensajeErrorEnCampos();
            }

        }//fin metodo redireccionar



    }
}